<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
    </head>
    <body>
        <script>
            /* 
            子集Ⅱ复杂的一点在于，它有重复元素，所以推入res前需要进行一个去重，但是子集依然是直接推入res中，不需要其他终止条件的
            */
            var subsetsWithDup = function (nums) {
                let map = new Map()
                let res = []
                function backTacking(path, start) {
                    //path被排序了，你推入顺序不就乱了吗。更何况还没有终止
                    if (start > nums.length) return
                    let str = [...path].sort((a, b) => a - b).join("")
                    if (map.has(str)) return
                    map.set(str, 1)
                    res.push([...path])
                    for (let i = start; i < nums.length; i++) {
                        path.push(nums[i])
                        backTacking(path, i + 1)
                        path.pop()
                    }
                }
                backTacking([], 0)
                return res
            }
            console.log(subsetsWithDup([4, 1, 0]))
        </script>
    </body>
</html>
